{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import os"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['1.txt',\n",
       " '10.txt',\n",
       " '11.txt',\n",
       " '12.txt',\n",
       " '13.txt',\n",
       " '14.txt',\n",
       " '15.txt',\n",
       " '16.txt',\n",
       " '17.txt',\n",
       " '18.txt',\n",
       " '19.txt',\n",
       " '2.txt',\n",
       " '20.txt',\n",
       " '21.txt',\n",
       " '22.txt',\n",
       " '23.txt',\n",
       " '24.txt',\n",
       " '25.txt',\n",
       " '3.txt',\n",
       " '4.txt',\n",
       " '5.txt',\n",
       " '6.txt',\n",
       " '7.txt',\n",
       " '8.txt',\n",
       " '9.txt']"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "os.listdir('email/ham/')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['yeah I am ready.  I may not be here because Jar Jar has plane tickets to Germany for me.  '],\n",
       "      dtype='<U90')"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.loadtxt('email/ham/16.txt',dtype=str,delimiter='\\n',encoding='Latin-1').flatten()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['Hi',\n",
       " 'Peter,With',\n",
       " 'Jose',\n",
       " 'out',\n",
       " 'of',\n",
       " 'town,',\n",
       " 'do',\n",
       " 'you',\n",
       " 'want',\n",
       " 'tomeet',\n",
       " 'once',\n",
       " 'in',\n",
       " 'a',\n",
       " 'while',\n",
       " 'to',\n",
       " 'keep',\n",
       " 'thingsgoing',\n",
       " 'and',\n",
       " 'do',\n",
       " 'some',\n",
       " 'interesting',\n",
       " 'stuff?Let',\n",
       " 'me',\n",
       " 'knowEugene']"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "''.join(np.loadtxt('email/ham/1.txt',dtype=str,delimiter='\\n')).split()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "def loadEmails(paths):\n",
    "    #1.初始化\n",
    "    docs,labels = [],[]\n",
    "    #2.遍历多个路径\n",
    "    for path in paths:\n",
    "        file_names = os.listdir(path)\n",
    "        docs,labels = [],[]\n",
    "        for file_name in file_names:\n",
    "            txt = ''.join(np.loadtxt('email/ham/1.txt',dtype=str,delimiter='\\n',encoding='Latin-1').flatten())\n",
    "            #字符串 -> 数组\n",
    "            doc = txt.split()\n",
    "            docs.append(doc)\n",
    "        if(path.find('ham') != -1):\n",
    "            labels = np.concatenate((labels, [0] * len(file_names)),axis=0)\n",
    "        else:\n",
    "            labels = np.concatenate((labels, [1] * len(file_names)),axis=0)\n",
    "    return docs,labels\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "([['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene'],\n",
       "  ['Hi',\n",
       "   'Peter,With',\n",
       "   'Jose',\n",
       "   'out',\n",
       "   'of',\n",
       "   'town,',\n",
       "   'do',\n",
       "   'you',\n",
       "   'want',\n",
       "   'tomeet',\n",
       "   'once',\n",
       "   'in',\n",
       "   'a',\n",
       "   'while',\n",
       "   'to',\n",
       "   'keep',\n",
       "   'thingsgoing',\n",
       "   'and',\n",
       "   'do',\n",
       "   'some',\n",
       "   'interesting',\n",
       "   'stuff?Let',\n",
       "   'me',\n",
       "   'knowEugene']],\n",
       " array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n",
       "        1., 1., 1., 1., 1., 1., 1., 1.]))"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "docs,labels = loadEmails(['email/ham','email/spam'])\n",
    "docs,labels\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def loadEmails2df(paths):\n",
    "    docs,labels=[],[]\n",
    "    for path in paths:\n",
    "        file_names=os.listdir(path)\n",
    "        for file_name in file_names:\n",
    "            txt=open(path+'/'+file_name,encoding='Latin-1',errors='ignore').read()\n",
    "            docs.append(txt)\n",
    "        \n",
    "        if(path.find('ham')!=-1):\n",
    "            labels=np.concatenate((labels,[0]*len(file_names)),axis=0)\n",
    "        else:\n",
    "            labels=np.concatenate((labels,[1]*len(file_names)),axis=0)\n",
    "    return pd.DataFrame({\n",
    "        'data':docs,\n",
    "        'target':labels\n",
    "        }\n",
    "    )\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.feature_extraction.text import TfidfVectorizer\n",
    "dataSet=loadEmails2df(['email/ham','email/spam'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "feature_extraction：抽取特征\n",
    "\n",
    "Tf(term-frequency):获取词语在文档中出现的概率\n",
    "\n",
    "idf(inverse document frequency):逆文档频率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "tf=TfidfVectorizer() #用来抽取文档的特征\n",
    "tf.fit(dataSet['data'])\n",
    "data_tf=tf.transform(dataSet['data'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "21    0.0\n",
       "37    1.0\n",
       "40    1.0\n",
       "23    0.0\n",
       "18    0.0\n",
       "2     0.0\n",
       "41    1.0\n",
       "43    1.0\n",
       "45    1.0\n",
       "36    1.0\n",
       "Name: target, dtype: float64"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "Xtrain,Xtest,Ytrain,Ytest=train_test_split(data_tf,dataSet['target'],test_size=0.2)\n",
    "Xtest.shape[0]\n",
    "Ytest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.naive_bayes import GaussianNB,MultinomialNB,BernoulliNB\n",
    "mnb=MultinomialNB()\n",
    "mnb.fit(Xtrain,Ytrain)\n",
    "mnb.score(Xtest,Ytest)\n",
    "bnb=BernoulliNB()\n",
    "bnb.fit(Xtrain,Ytrain)\n",
    "bnb.score(Xtest,Ytest)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.model_selection import cross_val_score\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "mnbs=[]\n",
    "bnbs=[]\n",
    "for i in range(10):\n",
    "    mnb = MultinomialNB()\n",
    "    mnb_s = cross_val_score(mnb,data_tf,dataSet['target'],cv=10).mean()\n",
    "    mnbs.append(mnb_s)\n",
    "    bnb = BernoulliNB()\n",
    "    bnb_s = cross_val_score(bnb,data_tf,dataSet['target'],cv=10).mean()\n",
    "    bnbs.append(bnb_s)\n",
    "plt.plot(range(1,11),mnbs,label = \"polynomial Bayes\")\n",
    "plt.plot(range(1,11),bnbs,label = \"Bernoulli Bayes\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3.8.9 64-bit",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.9"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "774a858b74b9162cfeaabab2cd52460f9ad2aea53b492b6366c174bcba156af9"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
